package com.skycong.hello77.activity.common;

import android.content.Context;
import android.provider.SyncStateContract;
import android.util.AttributeSet;
import android.view.ViewTreeObserver;
import android.widget.ListView;

/**
 * recyclerview 自动加载更多
 * Created by Kiki on 2018/5/10.
 */

public class LoadMoreListView extends ListView {

    /**
     * 可以加载更多
     */
    private boolean canLoadMore = true;
    private int pageSize = Constants.PAGE_SIZE;//每页多少条数据
    public LoadMoreListView(Context context) {
        super(context);
        addOnScrollChangedListener();//添加滚动监听
    }

    public LoadMoreListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        addOnScrollChangedListener();
    }

    public LoadMoreListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        addOnScrollChangedListener();
    }
    //滚动监听
    private void addOnScrollChangedListener() {
        /*注册监听视图树的观察者(observer)，在视图树种全局事件改变时得到通知
        * oncreate中View.getWidth和View.getHeight无法获得一个view的高度和宽度，
        * 这是因为View组件布局要在onResume回调后完成。所以现在需要使用getViewTreeObserver().addOnGlobalLayoutListener()
        * 来获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
        * getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度
        * */
        getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                if(onLoadMoreListener == null ||!canLoadMore){
                    return;
                }
                int last = getLastVisiblePosition();
                int index = getAdapter().getCount() - pageSize/2;
                if(last + 1 == index){
                    canLoadMore = false;
                    onLoadMoreListener.onAutoLoadMore();
                }
            }
        });
    }
    /**
     * 是否可以加载更多数据
     * @param dataSize 实际数据条数与请求pageSize比较，判断是否有更多数据
     */
    public void setCanLoadMore(int dataSize){
        this.canLoadMore = dataSize >= pageSize;
    }
    public void  setPageSize(int pageSize){this.pageSize = pageSize;}

    private AutoLoadMoreListener onLoadMoreListener;
    public void setOnLoadMoreListener(AutoLoadMoreListener onLoadMoreListener){
        this.onLoadMoreListener = onLoadMoreListener;
    }

    //是否自动加载的接口
   public interface AutoLoadMoreListener{
        public void onAutoLoadMore();
        public int setAutoLoadMorePageSize();
   }


}
